/*
 * En este archivo, definimos las estrucutras de datos
 * usadas en el master, y las fucniones asociadas a estas.
 */

#ifndef _LISTA_WORKERS_H
#define	_LISTA_WORKERS_H

    // Esta constante se debe usar para indicar que no hay worker.
    #define NO_WORKER 0

    // Definicion de estructuras de datos

    struct WORKER {
        int idWorker;
        int tamVector;
    };

    struct LISTA_WORKERS {
        int cantidad;
        int capacidadMaxima;
        struct WORKER **workers;
    };

    // Prototipado de funciones

    /*
     * Crea un objeto LISTA_WORKERS con espacio para almacenar la cantidad
     * de workers indicada.
     */
    struct LISTA_WORKERS *inicializarListaDeWorkers(int cantidadWorkers);

    /*
     * Elimina el worker especificado de la lista de workers pasada por parametro
     */
    struct WORKER *quitarWorkerDeLista(struct LISTA_WORKERS *listaWorkers, int idWorker);

    /*
     * Agrega al worker especificado a la lista de workers pasada por parametro
     */
    void colocarWorkerEnLista(struct LISTA_WORKERS *listaWorkers, struct WORKER *worker);

    /*
     * Libera la memoria ocupada por el objeto LISTA_WORKERS pasado por parámetro.
     * Si hay algun worker dentro de la lista, este tambien es limpiado de la memoria.
     */
    void eliminarListaDeWorkers(struct LISTA_WORKERS *listaWorkers, int eliminarElementos);

#endif	/* _LISTA_WORKERS_H */
